using System;

public class ReaptLinkedList 
{

    public class ListNode
    {
        public int val;
        public ListNode next;
        public ListNode(int val = 0, ListNode next = null)
        {
            this.val = val;
            this.next = next;
        }
    }
    //给定一个已排序的链表的头 head ， 删除原始链表中所有重复数字的节点，只留下不同的数字 。返回 已排序的链表 
    //关键如果是相同的就直接删 而不是存入不重复链表中
    public ListNode DeleteDuplicates(ListNode head) {
        //声明两个链表 一个存放重复的 一个存放不重复的
        ListNode repeat = new (101);
        ListNode noRepeat = new (101);

        //声明两个链表的指针
        ListNode p1 = repeat;
        ListNode p2 = noRepeat;

        //循环遍历原来的链表
        while(head!=null){
            //由于是默认升序 因此重复链表存放的前序重复节点 可以作为下一个节点是否重复的判断条件
            if(head.next!=null && head.val == head.next.val || head.val == p1.val){
                p1.next = head;
                p1 = p1.next;
            }else{
                p2.next = head;
                p2 = p2.next;
            }
            head = head.next;
        }
        p1.next = null;
        p2.next = null;
        return noRepeat.next;
    }
}
